home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / TRISSRC.ZIP / main.c < prev    next >
C/C++ Source or Header  |  1997-05-20  |  6KB  |  275 lines

  1. /*****************************************/
  2. /* DN PCTRIS                             */
  3. /* Written on 9 May 1996 by Michael Haar */
  4. /*****************************************/
  5.  
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <dn.h>
  9. #include <key.h>
  10. #include "DEFS.H"
  11.  
  12. /* globale Variablen */
  13. int grafixmode;
  14. BOOLEAN spielsound;
  15. BOOLEAN ende;
  16. SPIELER spieler[2];
  17. FALLSTEIN fallstein;
  18. void *hintergrund;
  19. int anz_spieler;
  20. GFXBLK steinpix[STEINARTEN + 1][17];
  21. RGB spielpal[256];
  22. GFXBLK gameoverpix;
  23. int steingroesse, feld_start_x, feld_start_y;
  24.  
  25. /* Funktionsprototypen */
  26. void commandline(int argc, const char *argv[]);
  27. void steuern_umschalten();
  28. void titel();
  29.  
  30. extern BOOLEAN spiel_init(int gfx);
  31. extern void spiel_exit();
  32. extern void spiel_reset();
  33.  
  34. extern void neuer_fallstein(SPIELER *sp);
  35. extern BOOLEAN stein_fallen(SPIELER *sp);
  36. extern BOOLEAN setze_stein(SPIELER *sp);
  37. extern void dreh_fallstein(SPIELER *sp);
  38. extern void wirf_fallstein(SPIELER *sp);
  39. extern void fallstein_rechts(SPIELER *sp);
  40. extern void fallstein_links(SPIELER *sp);
  41. void spieler_tasten(int nr);
  42. void spieler_cursortasten(int nr);
  43. void spieler_buchstaben(int nr);
  44. void spieler_buchstaben_control(int nr);
  45.  
  46. extern void set_feld_koords(SPIELER *sp);
  47. extern void zeichne_spielfeld();
  48. extern void zeige_stein(SPIELER *sp);
  49.  
  50. extern void highscore();
  51.  
  52. /* Funtionen */
  53. void commandline(int argc, const char *argv[])
  54. {
  55.     int i;
  56.  
  57.     grafixmode = 0x13;
  58.     joystick = FALSE;
  59.     spielsound = TRUE;
  60.  
  61.     for(i = 0; i < argc; i++)
  62.     {
  63.         if(!strcmp(argv[i], "-svga"))
  64.             grafixmode = 0x100;
  65.         else if(!strcmp(argv[i], "-joystick"))
  66.             joystick = TRUE;
  67.         else if(!strcmp(argv[i], "-nosound"))
  68.             spielsound = FALSE;
  69.     }
  70. }
  71.  
  72. void steuern_umschalten()
  73. {
  74.     if(anz_spieler == 1)
  75.     {
  76.         if(keyTest(KEY_F1))
  77.         {
  78.             if(spieler[0].steuern == spieler_cursortasten)
  79.                 spieler[0].steuern = spieler_tasten;
  80.             else
  81.                 spieler[0].steuern = spieler_cursortasten;
  82.             while(keyTest(KEY_F1))
  83.                 ;
  84.         }
  85.     }
  86.     else
  87.     {
  88.         if(keyTest(KEY_F2))
  89.         {
  90.             if(spieler[0].steuern == spieler_cursortasten)
  91.                 spieler[0].steuern = spieler_tasten;
  92.             else
  93.                 spieler[0].steuern = spieler_cursortasten;
  94.             while(keyTest(KEY_F2))
  95.                 ;
  96.         }
  97.         else if(keyTest(KEY_F1))
  98.         {
  99.             if(spieler[1].steuern == spieler_buchstaben)
  100.                 spieler[1].steuern = spieler_buchstaben_control;
  101.             else
  102.                 spieler[1].steuern = spieler_buchstaben;
  103.             while(keyTest(KEY_F1))
  104.                 ;
  105.         }
  106.     }
  107. }
  108.  
  109. void titel()
  110. {
  111.     GFXBLK titeltxtpix;
  112.     void *titelpix;
  113.     int pos;
  114.  
  115.     if(gfxmode == 0x13)
  116.     {
  117.         load_pic("PCTRIS.PIX", screen_addr, alt_rgb);
  118.         get(0, 0, 300, 120, &titeltxtpix);
  119.         titelpix = malloc(screen_width * screen_height);
  120.         load_pic("TITEL.PIX", titelpix, alt_rgb);
  121.         pos = -120;
  122.     }
  123.     else
  124.     {
  125.         load_pic("PCTRISS.PIX", screen_addr, alt_rgb);
  126.         get(0, 0, 600, 240, &titeltxtpix);
  127.         titelpix = malloc(screen_width * screen_height);
  128.         load_pic("TITELS.PIX", titelpix, alt_rgb);
  129.         pos = -240;
  130.     }
  131.     SetPalette(alt_rgb);
  132.     do
  133.     {
  134.         if(pos < 0)
  135.             pos += 2;
  136.         putvollbild(titelpix);
  137.         if(gfxmode == 0x13)
  138.         {
  139.             objput(5, pos, &titeltxtpix);
  140.             put_text(&schrift, 30, 180, "PRESS 1 FOR ONE PLAYER - 2 FOR TWO PLAYER");
  141.         }
  142.         else
  143.         {
  144.             objput(10, pos, &titeltxtpix);
  145.             put_text(&schrift, 60, 360, "PRESS 1 FOR ONE PLAYER - 2 FOR TWO PLAYER");
  146.         }
  147.         Copy2Screen();
  148.     }
  149.     while(!keyTest(KEY_SPACE) && !keyTest(KEY_ESC) && !keyTest(KEY_ENTER) && !keyTest(KEY_1) && !keyTest(KEY_2));
  150.     if(keyTest(KEY_1))
  151.         anz_spieler = 1;
  152.     else if(keyTest(KEY_2))
  153.         anz_spieler = 2;
  154.     else if(keyTest(KEY_ESC))
  155.         ende = TRUE;
  156.     else
  157.         ende = FALSE;
  158.     while(keyTest(KEY_SPACE) || keyTest(KEY_ENTER) || keyTest(KEY_1) || keyTest(KEY_2))
  159.         ;
  160.  
  161.     free(titelpix);
  162.     free(titeltxtpix.mem);
  163. }
  164.  
  165. /* Hauptprogramm */
  166. int main(int argc, const char *argv[])
  167. {
  168.     long t;
  169.     int fallen, i;
  170.  
  171.     commandline(argc, argv);
  172.  
  173.     if(!spiel_init(grafixmode))
  174.     {
  175.         puts("ERROR during initialisation!\7");
  176.         return(-1);
  177.     }
  178.  
  179.     while(!ende)
  180.     {
  181.         titel();
  182.  
  183. // save_pic("PCTRISTI.PCX", screen_addr, alt_rgb);
  184.     
  185.         spiel_reset();
  186.     
  187.         t = timer();
  188.         fallen = 9 - spieler[0].level;
  189.         while((spieler[0].gameover > 0) && (spieler[1].gameover > 0) && !ende)
  190.         {
  191.             if(timer() - t > 0)
  192.             {
  193.                 t = timer();
  194.  
  195.                 if(keyTest(KEY_ESC))
  196.                 {
  197.                     while(keyTest(KEY_ESC))
  198.                         ;
  199.                     spieler[0].gameover = 0;
  200.                     spieler[1].gameover = 0;
  201.                 }
  202.                 if(keyTest(KEY_P))
  203.                 {
  204.                     put_text(&schrift, screen_width / 2 - 6 * schrift.char_w / 2, screen_height / 2 - schrift.char_h / 2, "PAUSED");
  205.                     Copy2Screen();
  206.                     while(keyTest(KEY_P))
  207.                         ;
  208.                     while(!keyTest(KEY_SPACE) && !keyTest(KEY_P) && !keyTest(KEY_ESC))
  209.                         ;
  210.                 }
  211.  
  212.                 for(i = 0; i < anz_spieler; i++)
  213.                     if(spieler[i].gameover > 99)
  214.                         spieler[i].steuern(spieler[i].nr);
  215.  
  216.                 zeichne_spielfeld();
  217.  
  218.                 for(i = 0; i < anz_spieler; i++)
  219.                 {
  220.                     if(spieler[i].gameover > 99)
  221.                         zeige_stein(&spieler[i]);
  222.  
  223.                     if(spieler[i].gameover < 100)
  224.                     {
  225.                         if(fallen == 1)
  226.                             spieler[i].gameover -= 10;
  227.  
  228.                         set_feld_koords(&spieler[i]);
  229.                         if(gfxmode == 0x13)
  230.                             objput(feld_start_x + 15, feld_start_y + 70, &gameoverpix);
  231.                         else
  232.                             objput(feld_start_x + 30, feld_start_y + 140, &gameoverpix);
  233.                     }
  234.                 }
  235.  
  236.                 if(--fallen == 0)
  237.                 {
  238.                     fallen = 38 - spieler[0].level * 2;
  239.     
  240.                     for(i = 0; i < anz_spieler; i++)
  241.                         if(spieler[i].gameover > 99)
  242.                         {
  243.                             if(stein_fallen(&spieler[i]))
  244.                             {
  245.                                 if(setze_stein(&spieler[i]))
  246.                                     spieler[i].gameover = 99;
  247.                                 neuer_fallstein(&spieler[i]);
  248.                             }
  249.                         }
  250.                 }
  251.     
  252.                 Copy2Screen();
  253.  
  254. // if(keyTest(KEY_S))
  255. //    save_pic("PCTRISDU.PCX", screen_addr, spielpal);
  256.             }
  257.         }
  258.  
  259.         if((anz_spieler == 1) && !ende)
  260.             highscore();
  261.     }
  262.  
  263.     spiel_exit();
  264.  
  265.     puts("DN PCTRIS - Programming done in May 1996 by Michael Haar, DIGITAL Nightmares.");
  266.     puts("          - Grafix done by Ulrich Haar, DIGITAL Nightmares.\n");
  267.     puts("To contact DIGITAL Nightmares, email to");
  268.     puts("   michael.haar@informatik.uni-oldenburg.de");
  269.     puts("or write to");
  270.     puts("   Michael Haar, Am Schuetzenholz 29, 29643 Neuenkirchen, Germany\n");
  271.     puts("Visit our WWW-hompage:");
  272.     puts("   http://www.informatik.uni-oldenburg.de");
  273.     return(0);
  274. }
  275.